////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2017-2018 Qualcomm Technologies, Inc.
// All Rights Reserved.
// Confidential and Proprietary - Qualcomm Technologies, Inc.
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// THIS IS AUTO-GENERATED CODE.  PLEASE DO NOT EDIT (File bug reports against tools).
///
/// Auto-generated by: ParameterParser V1.1.4
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// @file  modtrigladjv1.h
/// @brief Auto-generated Chromatix parameter file
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

#ifndef MODTRIGLADJV1_H
#define MODTRIGLADJV1_H

#include "parametermodule.h"
#include "parameterfilesymboltable.h"
#include "parametertypes.h"
#include "globalelements.h"
#include "awbglobalelements.h"

#define MODTRIGLADJV1_NAMESPACE_BEGIN namespace modtrigladjv1 {
#define MODTRIGLADJV1_NAMESPACE_END }

MODTRIGLADJV1_NAMESPACE_BEGIN

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// modTriglAdjV1AuxInfoType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct modTriglAdjV1AuxInfoType
{
    INT32 numOfStartPosition;
    INT32 startTriangleIdx[4];
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// modTriglAdjV1TriglInfoType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct modTriglAdjV1TriglInfoType
{
    INT32 vertexIdx[3];
    INT32 sideIdx[3];
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// modTriglAdjV1TriglGainAdjType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct modTriglAdjV1TriglGainAdjType
{

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// triggerPt
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    awbglobalelements::triggerPointType       triggerPt;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// triggerData - Array
    /// Min Length:    1
    /// Max Length:    Unbounded
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    UINT32                 triggerDataCount;
    UINT32                 triggerDataID;
    awbglobalelements::awbTriggerDataRGBType* triggerData;
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// modTriglAdjV1TriglVertexInfoType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct modTriglAdjV1TriglVertexInfoType
{

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// vertexPt
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    awbglobalelements::awbPointDataType              vertexPt;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// gainAdjData
    ///
    /// Description:   Gain adjust triggered by lux index
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    modTriglAdjV1TriglGainAdjType gainAdjData;
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// modTriglAdjV1CCTAdjGainType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct modTriglAdjV1CCTAdjGainType
{

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// triggerPt
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    awbglobalelements::triggerPointType       triggerPt;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// triggerData - Array
    /// Min Length:    1
    /// Max Length:    Unbounded
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    UINT32                 triggerDataCount;
    UINT32                 triggerDataID;
    awbglobalelements::awbTriggerDataRGBType* triggerData;
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// chromatixTriglAdjV1Type
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct chromatixTriglAdjV1Type
{
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Binary file symbol table entry ID
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    UINT32 SymbolTableID;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// moduleID
    ///
    /// Tuning Level:  never_tune
    /// Description:   Define module ID, sub module ID
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    awbglobalelements::moduleIDType                      moduleID;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// module_version
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    struct module_versionStruct
    {
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// Binary file symbol table entry ID
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        UINT32 SymbolTableID;
        INT32 major_revision;
        INT32 minor_revision;
        INT32 incr_revision;
    } module_version;
    awbglobalelements::enableFlagType                    enableFlag;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// triglData - Array
    ///
    /// Tuning Level:  often_tune
    /// Description:   vertexIdx: index of each vertex of triangle , sideIdx: index of adjacent triangle
    /// Min Length:    1
    /// Max Length:    Unbounded
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    UINT32                            triglDataCount;
    UINT32                            triglDataID;
    modTriglAdjV1TriglInfoType*       triglData;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// vertexData - Array
    ///
    /// Tuning Level:  often_tune
    /// Description:   Vertex point along with gain adjust value triggered by Lux index
    /// Min Length:    1
    /// Max Length:    Unbounded
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    UINT32                            vertexDataCount;
    UINT32                            vertexDataID;
    modTriglAdjV1TriglVertexInfoType* vertexData;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// auxInfoData
    ///
    /// Tuning Level:  often_tune
    /// Description:   Start position of triangle search
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    modTriglAdjV1AuxInfoType          auxInfoData;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// cctAdjGainData
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    struct cctAdjGainDataStruct
    {
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// Binary file symbol table entry ID
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        UINT32 SymbolTableID;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// triggerPt
        ///
        /// Tuning Level:  never_tune
        /// Description:   Dummy trigger data for keeping structure consistency
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        awbglobalelements::triggerPointType             triggerPt;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// triggerData - Array
        /// Min Length:    1
        /// Max Length:    Unbounded
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        UINT32                       triggerDataCount;
        UINT32                       triggerDataID;
        modTriglAdjV1CCTAdjGainType* triggerData;
    } cctAdjGainData;
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// chromatixTriglAdjV1TypeClass
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
class chromatixTriglAdjV1TypeClass : public ParameterModule, public chromatixTriglAdjV1Type
{
public:
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Version
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static const UINT16 MAJOR = 1;
    static const UINT16 MINOR = 0;
    static const UINT32 PATCH = 0;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Default Constructor
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    chromatixTriglAdjV1TypeClass(
        const CHAR* name);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Constructor
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    chromatixTriglAdjV1TypeClass(
        const CHAR* name,
        UINT32 modeId,
        UINT16 mode,
        UINT16 subMode,
        UINT32 group);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Destructor
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    virtual ~chromatixTriglAdjV1TypeClass();

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// GetName
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static const CHAR* GetName(
        const CHAR* type);


    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load modTriglAdjV1AuxInfoType
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL LoadmodTriglAdjV1AuxInfoType(
        ParameterFileSymbolTableEntry* entry,
        modTriglAdjV1AuxInfoType* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load modTriglAdjV1TriglInfoType
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL LoadmodTriglAdjV1TriglInfoType(
        ParameterFileSymbolTableEntry* entry,
        modTriglAdjV1TriglInfoType* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load modTriglAdjV1TriglGainAdjType
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL LoadmodTriglAdjV1TriglGainAdjType(
        ParameterFileSymbolTableEntry* entry,
        modTriglAdjV1TriglGainAdjType* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load modTriglAdjV1TriglVertexInfoType
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL LoadmodTriglAdjV1TriglVertexInfoType(
        ParameterFileSymbolTableEntry* entry,
        modTriglAdjV1TriglVertexInfoType* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load modTriglAdjV1CCTAdjGainType
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL LoadmodTriglAdjV1CCTAdjGainType(
        ParameterFileSymbolTableEntry* entry,
        modTriglAdjV1CCTAdjGainType* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load chromatixTriglAdjV1Type
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL LoadchromatixTriglAdjV1Type(
        ParameterFileSymbolTableEntry* entry,
        chromatixTriglAdjV1Type* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load module_versionStruct
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL Loadmodule_versionStruct(
        ParameterFileSymbolTableEntry* entry,
        chromatixTriglAdjV1Type::module_versionStruct* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load cctAdjGainDataStruct
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL LoadcctAdjGainDataStruct(
        ParameterFileSymbolTableEntry* entry,
        chromatixTriglAdjV1Type::cctAdjGainDataStruct* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Unload modTriglAdjV1TriglGainAdjType
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static void UnloadmodTriglAdjV1TriglGainAdjType(
        modTriglAdjV1TriglGainAdjType* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Unload modTriglAdjV1TriglVertexInfoType
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static void UnloadmodTriglAdjV1TriglVertexInfoType(
        modTriglAdjV1TriglVertexInfoType* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Unload modTriglAdjV1CCTAdjGainType
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static void UnloadmodTriglAdjV1CCTAdjGainType(
        modTriglAdjV1CCTAdjGainType* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Unload chromatixTriglAdjV1Type
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static void UnloadchromatixTriglAdjV1Type(
        chromatixTriglAdjV1Type* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Unload cctAdjGainDataStruct
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static void UnloadcctAdjGainDataStruct(
        chromatixTriglAdjV1Type::cctAdjGainDataStruct* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Parse symbol table entry, and return a new object
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    virtual ParameterModule* Parse(
        ParameterSetManager* manager,
        ParameterFileSymbolTableEntry* entry) const;

}; // End class chromatixTriglAdjV1TypeClass

MODTRIGLADJV1_NAMESPACE_END
#endif // MODTRIGLADJV1_H

